﻿namespace Raven
{
    public class Constants
    {
        public const int WindowWidth = 500;
        public const int WindowHeight = 500;
        public const int FrameRate = 60;

        public const string MapPath = "Assets/ResourcesAssets/Raven_DM1.bytes";

        public const int NumBots = 30;
        public const int GraveLifetime = 5;
        public const int MaxSearchCyclesPerUpdateStep = 1000;
        public const int INVALID_NODE_INDEX = -1;
        public const int NumCellsX = 10;
        public const int NumCellsY = 10;
        public static Fix Bot_BRadius = 5;
        public static Fix Bot_MaxSpeed = 1;
        public static Fix Bot_Mass = 1;
        public static Fix Bot_MaxHeadTurnRate = Fix.Ratio(1, 5);
        public static Fix Bot_MaxForce = 1;
        public static Fix SeparationWeight = 10;
        public static Fix WallAvoidanceWeight = 10;
        public static Fix WanderWeight = 1;
        public static Fix SeekWeight = Fix.Ratio(1, 2);
        public static Fix ArriveWeight = 1;
        public static Fix ViewDistance = 15;
        public static Fix WallDetectionFeelerLength = 25;
        public static Fix Bot_FOV = 180;

        public static Fix Bolt_MaxSpeed = 5;
        public static Fix Bolt_Mass = 1;
        public static Fix Bolt_MaxForce = 100;
        public static Fix Bolt_BRadius = Fix.Ratio(4, 5);
        public const int Bolt_Damage = 1;

        //to make code easier to read
        public static Fix SEND_MSG_IMMEDIATELY = 0;
        public const int SENDER_ID_IRRELEVANT = -1;

        public const int Bot_WeaponSelectionFrequency = 2;
        public const int Bot_GoalAppraisalUpdateFreq = 4;
        public const int Bot_TargetingUpdateFreq = 2;
        public const int Bot_TriggerUpdateFreq = 8;
        public const int Bot_VisionUpdateFreq = 4;
        public static Fix Bot_MemorySpan = 5;

        public static Fix Blaster_FiringFreq = 3;
        public static Fix Blaster_MaxSpeed = 5;
        public const int Blaster_DefaultRounds = 0;
        public const int Blaster_MaxRoundsCarried = 0;
        public static Fix Blaster_IdealRange = 50;
        public static Fix Blaster_SoundRange = 100;


        public static Fix Bot_ReactionTime = Fix.Ratio(1, 5);

        public static Fix Bot_AimPersistance = 1;

        public static Fix Bot_AimAccuracy = 0;

        public static Fix DefaultGiverTriggerRange = 10;

        public static Fix Health_RespawnDelay = 10;

        public static Fix Weapon_RespawnDelay = 15;

        public const bool SmoothPathsQuick = true;

        public const bool SmoothPathsPrecise = true;

        public const int Bot_MaxHealth = 10;

        public static Fix RailGun_FiringFreq = 1;
        public const int RailGun_DefaultRounds = 15;
        public static Fix RailGun_IdealRange = 200;
        public static Fix RailGun_SoundRange = 400;
        public const int RailGun_MaxRoundsCarried = 50;

        public static Fix Slug_MaxSpeed = 500;
        public static Fix Slug_Mass = 1;
        public static Fix Slug_MaxForce = 10000;
        public static Fix Slug_Persistance = Fix.Ratio(1, 5);
        public const int Slug_Damage = 3;
        public static Fix Slug_BRadius = Fix.Ratio(4, 5);

        public const int RocketLauncher_MaxRoundsCarried = 50;
        public static Fix RocketLauncher_FiringFreq = Fix.Ratio(2, 2);
        public const int RocketLauncher_DefaultRounds = 15;
        public static Fix RocketLauncher_IdealRange = 150;
        public static Fix RocketLauncher_SoundRange = 400;

        public static Fix Rocket_BlastRadius = 20;
        public static Fix Rocket_MaxSpeed = 3;
        public static Fix Rocket_Mass = 1 ;
        public static Fix Rocket_MaxForce = 10;
        public static Fix Rocket_BRadius = Fix.Ratio(4, 5);
        public const int Rocket_Damage = 5;
        public static Fix Rocket_ExplosionDecayRate = 2;

        public static Fix ShotGun_FiringFreq = 1;
        public const int ShotGun_DefaultRounds = 15;
        public const int ShotGun_MaxRoundsCarried = 50;
        public const int ShotGun_NumBallsInShell = 5;
        public static Fix ShotGun_Spread = Fix.Ratio(5, 100);
        public static Fix ShotGun_IdealRange = 100;
        public static Fix ShotGun_SoundRange = 400;

        public static Fix Pellet_MaxSpeed = 500;
        public static Fix Pellet_Mass = 1;
        public static Fix Pellet_MaxForce = 1000;
        public static Fix Pellet_BRadius = Fix.Ratio(4, 5);
        public static Fix Pellet_Persistance = Fix.Ratio(1, 10);
        public const int Pellet_Damage = 2;

        public static Fix Sword_SlayFreq = 1;
        public static Fix Sword_IdealRange = 50;

        public const int Fan_Shape_Damage = 10;
        public static Fix Fan_Shape_BRadius = 50;
        public static Fix Fan_Shape_Impact_Deg = 70;
        public static Fix Fan_Shape_Time_Visible = Fix.Ratio(3, 10);
        
        public static Fix SoundNotify_LifeTime = Fix.Ratio(1, 10);

    }
}